home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Taifun
/
Taifun 219 (1992-09-10)(Manewaldt, A.)(DE)(PD).zip
/
Taifun 219 (1992-09-10)(Manewaldt, A.)(DE)(PD).adf
/
BILDSCHIRMSCHONER
/
Bildschirmschoner2.bas
< prev
next >
Wrap
BASIC Source File
|
1992-09-02
|
14KB
|
653 lines
REM $option y+
REM $option k40
LIBRARY "exec.library"
LIBRARY "graphics.library"
LIBRARY "intuition.library"
DECLARE FUNCTION allocmem&() LIBRARY
DECLARE FUNCTION FreeMem&() LIBRARY
DECLARE FUNCTION Findtask&() LIBRARY
DIM zaehler1%(20),zaehler2%(20),ozaehler1%(20),ozaehler2%(20)
task&=findtask&(0)
CALL settaskpri&(task&,-127)
zeit2&=30:akt=3
IF COMMAND$<>"" THEN
t=INSTR(1,COMMAND$," ")
IF t>0 THEN
zeit2&=VAL(LEFT$(COMMAND$,t-1))
akt=VAL(MID$(COMMAND$,t+1,1))
END IF
END IF
WINDOW 1,"Bildschirmschoner 1.0 © 1992 by Siegfried Rings",(0,0)-(600,15),24+4+3
scrollie$=" BILDSCHIRMSCHONER 1.0 ist FREEWARE ! © 1992 by S.RINGS "
haupt$="SR-SOFTWARE-DESIGN"
zaehler%=1
IF FEXISTS("data0") THEN
OPEN "data0" FOR INPUT AS #1
LINE INPUT #1,Haupt$
WHILE NOT EOF(1)
LINE INPUT #1,a$
scrollie$=scrollie$+" "+a$
WEND
CLOSE 1
END IF
sWindow& = WINDOW(7)
sScreen& = PEEKL(sWindow& + 46)
sViewPort& = sScreen& + 44
sRastPort& = sScreen& + 84
sColorMap& = PEEKL(sViewPort& + 4)
colorTab& = PEEKL(sColorMap& + 4)
REM Sb&=peekl(sRastport&+4)
FOR i=0 TO 3
farbe=PEEKW(colortab&+(2*i))
r3%(i)=farbe\16^2
g3%(i)=(farbe MOD 16^2)\16
b3%(i)=farbe-r3%(i)*256-g3%(i)*16
NEXT i
MENU 1,0,1,"SR_SOFTWARE_DESIGN BILDSCHIRMSCHONER"
MENU 1,1,1," Einstellungen "
MENU 1,2,1," Über das Programm "
MENU 1,3,1," Entfernen "
GOSUB farbi2
GOSUB farbi1
DIM pic%(2000)
address&=VARPTR(pic%(0))
BLOAD "data1",address&
haupt1:
zeit&=TIMER
REM zeit2&=1
speed=1:richtung1=speed:richtung2=0
nop1%=2:nop2%=4
anzahl=10
man3%=20
REM akt=1
IF zeit2&<1 THEN zeit2&=1
CLS
PRINT "Die Zeit steht auf ";zeit2&;" Sekunden";
poregister&=&hdff00a
p1register&=&hdff00c
mr&=14675990&
ml&=&hbfe001
dr&=12574721&
t1&=12577793&
p00=PEEKW(poregister&)
p11=PEEKW(p1register&)
br11=PEEKW(mr&)
bl11=PEEKB(ml&)
d11=PEEKB(dr&)
t11=PEEKB(t1&)
haupt:
p0=PEEKW(poregister&)
p1=PEEKW(p1register&)
br1=PEEKW(mr&)
d1=PEEKB(dr&)
bl1=PEEKB(ml&)
t12=PEEKB(t1&)
IF p0<>p00 THEN GOSUB normal
IF d11<>d1 THEN GOSUB normal
IF br1<>br11 THEN GOSUB normal
IF p1<>p11 THEN GOSUB normal
IF bl1<>bl11 THEN GOSUB normal
IF t11<>t12 THEN GOSUB normal
IF TIMER-zeit2&>zeit& AND bit=0 THEN GOSUB dunkel
IF bit=1 THEN
sWindow1& = WINDOW(7)
sScreen1& = PEEKL(sWindow1& + 46)
sViewPort1& = sScreen1& + 44
sRastPort1& = sScreen1& + 84
sColorMap1& = PEEKL(sViewPort1& + 4)
colorTab1& = PEEKL(sColorMap1& + 4)
Sb&=PEEKL(sRastport1&+4)
IF akt=1
INCR t:IF t>7 THEN t=0
LOCATE 14,45:COLOR 1,0:PRINT MID$(scrollie$,zaehler%,1)
REM CALL setapen&(srastport&,0)
REM CALL move&(srastport1&,350,106)
REM CALL text&(srastport1&,SADD(scrollie$)+zaehler%,1)
INCR zaehler%:IF zaehler%=LEN(scrollie$) THEN zaehler%=1
FOR nop%=1 TO nop1%
CALL waittof
CALL bltbitmaprastport(sb&,nop2%,100,srastport1&,0,100,360,15,192)
NEXT nop%
END IF
IF akt=2
FOR t=1 TO anzahl
zaehler1%(t)=zaehler1%(t)+t:IF zaehler1%(t)>320 THEN zaehler1%(t)=0
zaehler2%(t)=zaehler2%(t)+t:IF zaehler2%(t)>200 THEN zaehler2%(t)=0
LINE(zaehler1%(t),zaehler2%(t))-(zaehler2%(t)+20,200-zaehler2%(t)),1
LINE(ozaehler1%(t),ozaehler2%(t))-(ozaehler2%(t)+20,200-ozaehler2%(t)),0
ozaehler1%(t)=zaehler1%(t):ozaehler2%(t)=zaehler2%(t)
NEXT t
END IF
IF akt=3 THEN
INCR man2%
IF man2%=man3% THEN
man2%=0
x1%=x1%-4
IF x1%<180 AND x1%>120 THEN
LOCATE 10,10:PRINT "Wo ist denn mein BOSS ?"
ELSE
LOCATE 10,10:PRINT " "
END IF
IF x1%<0 THEN x1%=320:LINE(0,100)-(0+50,150),0,bf
waittof
LINE(x1%,100)-(x1%+50,150),0,bf
INCR man%
IF man%>8 THEN man%=1
IF man%=1 THEN CALL bltbitmaprastport(sb&,360+1,1,srastport1&,x1%,100,30,50,192)
IF man%=2 THEN CALL bltbitmaprastport(sb&,360+67,1,srastport1&,x1%,100,30,50,192)
IF man%=3 THEN CALL bltbitmaprastport(sb&,360+32,1,srastport1&,x1%,100,30,50,192)
IF man%=4 THEN CALL bltbitmaprastport(sb&,360+67,1,srastport1&,x1%,100,30,50,192)
IF man%=5 THEN CALL bltbitmaprastport(sb&,360+1,1,srastport1&,x1%,100,30,50,192)
IF man%=6 THEN CALL bltbitmaprastport(sb&,360+136,1,srastport1&,x1%,100,30,50,192)
IF man%=7 THEN CALL bltbitmaprastport(sb&,360+102,1,srastport1&,x1%,100,30,50,192)
IF man%=8 THEN CALL bltbitmaprastport(sb&,360+136,1,srastport1&,x1%,100,30,50,192)
END IF
REM PUT (1,1),pic%,PSET
REM WHILE MOUSE(0)<>1:LOCATE 10,10:PRINT MOUSE(1),MOUSE(2):WEND
END IF
IF akt=4 THEN
CALL waittof
CALL bltbitmaprastport(sb&,richtung1,0,srastport1&,richtung2,0,640,200,192)
END IF
END IF
m1%=MENU(0)
IF m1%<>1 THEN GOTO haupt
m1%=MENU(1)
ON m1%GOSUB eins,zwei,drei
GOTO haupt
dunkel:
IF akt=0 THEN
PALETTE 0,0,0,0
CALL display (0)
ELSE
SCREEN 2,620,200,3,1
WINDOW 3,,,128,2
END IF
IF akt=1 THEN
PALETTE 0,0,0,0
PALETTE 1,0,0,0
GOSUB farbi3
COLOR 1,0
LOCATE 5,10:PRINT haupt$
sprite 0
END IF
IF akt=2 THEN
PALETTE 0,0,0,0
PALETTE 1,0,0,0
PALETTE 2,0,0,.6
PALETTE 3,.6,.6,0
GOSUB farbi4
zaehler1%=0:zaehler2%=10:zaehler3%=200:zaehler4%=120
sprite 0
END IF
IF akt=4 THEN
sprite 0
FOR t=0 TO 4:PALETTE t,0,0,0:NEXT t
CLS
t=1
FOR i=1 TO 150
x=INT(RND*610)
y=INT(RND*200)
INCR t:IF t>4 THEN t=2
IF t=3 THEN LINE (x,y)-(x+1,y),3:LINE (x,y)-(x,y+1),3
IF t=2 THEN LINE (x-1,y)-(x+1,y),3:LINE (x+1,y-1)-(x,y+1),3
IF t=4 THEN PSET (x,y),t
NEXT
PALETTE 1,0,0,0
PALETTE 2,.6,.6,.6
PALETTE 3,.4,.4,.4
PALETTE 4,.2,.2,.2
END IF
IF akt=3 THEN
REM SCREEN 2,620,200,3,1
REM WINDOW 3,,,128,2
PALETTE 0,0,0,0
PALETTE 1,14/15,11/15,7/15
PALETTE 2,12/15,9/15,6/15
PALETTE 3,13/15,10/15,0
PALETTE 4,1/15,1/15,11/15
PALETTE 5,15/15,12/15,0
PALETTE 6,5/15,3/15,1/15
PALETTE 7,12/15,12/15,12/15
PUT (360,1),pic%,PSET
COLOR 7,0
END IF
bit=1
RETURN
normal:
p00=PEEKW(poregister&)
p11=PEEKW(p1register&)
br11=PEEKW(mr&)
bl11=PEEKB(ml&)
d11=PEEKB(dr&)
t11=PEEKB(t1&)
zeit&=TIMER
IF akt=0 THEN
CALL display (1)
PALETTE 0,r3%(0)/15,g3%(0)/15,b3%(0)/15
ELSE
POKEL vport&+20,old&
WINDOW CLOSE 3
SCREEN CLOSE 2
END IF
bit=0
sprite 1
RETURN
eins:
WINDOW 2,"EINSTELLUNGEN VORNEHMEN",(100,60)-(470,170),1
LOCATE 2,18:PRINT "Verweildauer in sec."
LINE (10,5)-(20,20),2
LINE (10,5)-(30,5),2
LINE (30,5)-(20,20),2
PAINT (20,15),1,2
LINE (90,20)-(110,20),2
LINE (90,20)-(100,5),2
LINE (110,20)-(100,5),2
PAINT (100,15),1,2:
box 33,6,40,10,1
LOCATE 2,6:PRINT RIGHT$(STR$(zeit2&),LEN(STR$(zeit2&))-1)
LOCATE 4,2:PRINT " Laufschrift"
LOCATE 4,20:PRINT "SPEED"+STR$(nop2%)
box 150,22,210,10,2
LOCATE 6,2:PRINT " Sternenhimmel"
LOCATE 6,20:PRINT " < >":LOCATE 6,30:PRINT "SPEED"+STR$(speed)
IF richtung1>0 THEN
box 150,38,25,10,0
box 180,38,25,10,2
ELSE
box 150,38,25,10,2
box 180,38,25,10,0
END IF
box 210,38,150,10,2
LOCATE 8,2:PRINT " HERBERT"
LOCATE 8,20:PRINT " - +":LOCATE 8,28:PRINT"Arbeitsmoral:"+STR$(man3%)
box 150,54,25,10,2
box 180,54,25,10,2
box 210,54,150,10,2
box 210,54,150,10,3
LOCATE 8,28:PRINT"Arbeitsmoral:"+STR$(man3%)
LOCATE 10,2:PRINT " Linien "
LOCATE 10,20:PRINT " - +":LOCATE 10,30:PRINT"Anzahl:"+STR$(anzahl)
box 150,70,25,10,2
box 180,70,25,10,2
box 210,70,150,10,2
LOCATE 12,2:PRINT " Normal Dunkel"
GOSUB eins3
box 150,86,210,10,2
LOCATE 12,20:PRINT" Zurück"
eins1:
IF MOUSE(0)<>1 THEN GOTO eins1
x=MOUSE(1)
y=MOUSE(2)
IF y>5 AND y<20 THEN
IF x>10 AND x<30 THEN INCR zeit2&
IF x>90 AND x<110 THEN DECR zeit2&
END IF
IF x>5 AND x<145 THEN
IF y>22 AND y<32 THEN akt=1:GOSUB eins3
IF y>38 AND y<48 THEN akt=4:GOSUB eins3
IF y>54 AND y<64 THEN akt=3:GOSUB eins3
IF y>70 AND y<80 THEN akt=2:GOSUB eins3
IF y>86 AND y<96 THEN akt=0:GOSUB eins3
END IF
IF y>22 AND y<32 THEN
IF x>150 AND x<290 THEN
nop2%=nop2%*2
IF nop2%=16 THEN nop2%=1
IF nop2%=1 THEN nop1%=8
IF nop2%=2 THEN nop1%=4
IF nop2%=4 THEN nop1%=2
IF nop2%=8 THEN nop1%=1
box 150,22,210,10,3
LOCATE 4,20:PRINT "SPEED"+STR$(nop2%)
END IF
END IF
IF y>38 AND y<48 THEN
IF x>150 AND x<175 THEN
richtung1=speed:richtung2=0
box 150,38,25,10,0
box 180,38,25,10,2
END IF
IF x>180 AND x<205 THEN
richtung2=speed:richtung1=0
box 150,38,25,10,2
box 180,38,25,10,0
END IF
IF x>210 AND x<350 THEN
box 210,38,150,10,1
CALL warten(.1)
INCR speed
IF speed>9 THEN speed=1
LOCATE 6,30:PRINT "SPEED"+STR$(speed)
IF richtung1>0 THEN
richtung1=speed:richtung2=0
ELSE
richtung2=speed:richtung1=0
END IF
box 210,38,150,10,2
END IF
END IF
IF y>70 AND y<80 THEN
IF x>150 AND x<175 THEN
DECR anzahl
IF anzahl<1 THEN anzahl=1
END IF
IF x>180 AND x<205 THEN
INCR anzahl
IF anzahl>20 THEN anzahl=20
END IF
box 210,70,150,10,3
LOCATE 10,30:PRINT"Anzahl:"+STR$(anzahl)
END IF
IF y>54 AND y<64 THEN
IF x>150 AND x<175 THEN
DECR man3%
IF man%<1 THEN man3%=1
END IF
IF x>180 AND x<205 THEN
INCR man3%
IF man3%>150 THEN man3%=150
END IF
box 210,54,150,10,3
LOCATE 8,28:PRINT"Arbeitsmoral:"+STR$(man3%)
END IF
IF x>150 AND x<290 AND y>86 AND y<96 THEN GOTO eins2
IF zeit2&<1 THEN zeit2&=1
IF zeit2&>4000 THEN zeit2&=4000
box 33,6,40,10,1
LOCATE 2,6:PRINT RIGHT$(STR$(zeit2&),LEN(STR$(zeit2&))-1)
GOTO eins1
eins2:
IF zeit2&<1 THEN zeit2&=1
WINDOW CLOSE 2
CLS
PRINT "Die Zeit steht auf ";zeit2&;" Sekunden";
RETURN
eins3:
IF akt=1 THEN
box 5,22,140,10,0
box 5,38,140,10,2
box 5,54,140,10,2
box 5,70,140,10,2
box 5,86,140,10,2
END IF
IF akt=0 THEN
box 5,22,140,10,2
box 5,38,140,10,2
box 5,54,140,10,2
box 5,70,140,10,2
box 5,86,140,10,0
END IF
IF akt=2 THEN
box 5,22,140,10,2
box 5,38,140,10,2
box 5,54,140,10,2
box 5,70,140,10,0
box 5,86,140,10,2
END IF
IF akt=3 THEN
box 5,22,140,10,2
box 5,38,140,10,2
box 5,54,140,10,0
box 5,70,140,10,2
box 5,86,140,10,2
END IF
IF akt=4 THEN
box 5,22,140,10,2
box 5,38,140,10,0
box 5,54,140,10,2
box 5,70,140,10,2
box 5,86,140,10,2
END IF
RETURN
zwei:
WINDOW 2,"Über das Programm 'BILDSCHIRMSCHONER'",(100,100)-(500,170),1
PRINT "BILDSCHIRMSCHONER 1.0 ,programmiert am 12.7.1992"
PRINT "von Siegfried Rings in HISOFT-BASIC (COMPILIERT)"
PRINT "Dieses Programm ist FREEWARE !Jeder soll und darf"
PRINT "es benutzen.Wer mehr wissen will,schreibt an:"
PRINT "Siegfried Rings Software-Design"
PRINT "Iserstraße 7, 5419 Kleinmaischeid BRD"
PRINT
PRINT " Drücke linke Maustaste";
WHILE MOUSE(0)<>1:WEND
WINDOW CLOSE 2
RETURN
drei:
GOSUB farbiende
SYSTEM
SUB DISPLAY(s%) STATIC
IF s%=1 THEN POKEW 14676118&,33024&
IF s%=0 THEN POKEW 14676118&,256
END SUB
SUB warten (zeit) STATIC
t=TIMER
WHILE TIMER<t+zeit:WEND
END SUB
farbiende:
wert& = FreeMem&(Clist&,4*63)
wert& = FreeMem&(Clist2&,4*63)
RETURN
farbi1:
Clist&=allocmem&(4*63,65539&)
col%=0
CALL CWait(Clist&,0,0)
CALL CBump(Clist&)
CALL CMove(Clist&,386,0)
CALL CBump(Clist&)
t=1
REM Jetzt folgt der Balken
FOR i%=26 TO 36 STEP 2
CALL CWait(Clist&,i%,0)
CALL CBump(Clist&)
CALL CMove(Clist&,386,col%)
CALL CBump(Clist&)
col%=col%+&H300
NEXT i%
CALL CWait(Clist&,100,0)
CALL CBump(Clist&)
CALL CMove(Clist&,384,&H333)
CALL CBump(Clist&)
CALL CWait(Clist&,104,0)
CALL CBump(Clist&)
CALL cmove(clist&,386,&hf40)
CALL CBump(Clist&)
CALL CWait(Clist&,106,0)
CALL CBump(Clist&)
CALL cmove(clist&,386,&hd70)
CALL CBump(Clist&)
CALL CWait(Clist&,108,0)
CALL CBump(Clist&)
CALL cmove(clist&,386,&haa0)
CALL CBump(Clist&)
CALL CWait(Clist&,110,0)
CALL CBump(Clist&)
CALL cmove(clist&,386,&h8d0)
CALL CBump(Clist&)
CALL CWait(Clist&,114,0)
CALL CBump(Clist&)
CALL cmove(clist&,384,&h000)
CALL CBump(Clist&)
CALL cmove(clist&,386,&h000)
CALL CBump(Clist&)
CALL CWait(Clist&,10000,255)
CALL CBump(Clist&)
RETURN
farbi2:
Clist2&=allocmem&(4*63,65539&)
col%=0
CALL CWait(Clist2&,0,0)
CALL CBump(Clist2&)
CALL CMove(Clist2&,386,0)
CALL CBump(Clist2&)
t=1
col%=0
REM Jetzt folgt der Balken
FOR i%=11 TO 41
CALL CWait(Clist2&,i%,0)
CALL CBump(Clist2&)
CALL CMove(Clist2&,386,col%)
CALL CBump(Clist2&)
col%=col%+(t*&H100)
IF col%=&HF00 THEN t=t*-1
NEXT i%
col%=0:t=1
FOR i%=42 TO 72
CALL CWait(Clist2&,i%,0)
CALL CBump(Clist2&)
CALL CMove(Clist2&,386,col%)
CALL CBump(Clist2&)
col%=col%+(t*&H110)
IF col%=&HFF0 THEN t=t*-1
NEXT i%
col%=0:t=1
FOR i%=73 TO 103
CALL CWait(Clist2&,i%,0)
CALL CBump(Clist2&)
CALL CMove(Clist2&,386,col%)
CALL CBump(Clist2&)
col%=col%+(t*&H111)
IF col%=&HFFF THEN t=t*-1
NEXT i%
col%=0:t=1
FOR i%=104 TO 134
CALL CWait(Clist2&,i%,0)
CALL CBump(Clist2&)
CALL CMove(Clist2&,386,col%)
CALL CBump(Clist2&)
col%=col%+(t*&H011)
IF col%=&H0FF THEN t=t*-1
NEXT i%
col%=0:t=1
FOR i%=136 TO 166
CALL CWait(Clist2&,i%,0)
CALL CBump(Clist2&)
CALL CMove(Clist2&,386,col%)
CALL CBump(Clist2&)
col%=col%+(t*&H001)
IF col%=&H00F THEN t=t*-1
NEXT i%
col%=0:t=1
FOR i%=168 TO 198
CALL CWait(Clist2&,i%,0)
CALL CBump(Clist2&)
CALL CMove(Clist2&,386,col%)
CALL CBump(Clist2&)
col%=col%+(t*&H101)
IF col%=&HF0F THEN t=t*-1
NEXT i%
CALL cmove(clist2&,384,&h000)
CALL CBump(Clist2&)
CALL CWait(Clist2&,10000,255)
CALL CBump(Clist2&)
RETURN
farbi3:
vport&=PEEKL(WINDOW(7)+46)+44
old&=PEEKL(vport&+20)
POKEL vport&+20,Clist&
CALL RethinkDisplay
RETURN
farbi4:
vport&=PEEKL(WINDOW(7)+46)+44
old&=PEEKL(vport&+20)
POKEL vport&+20,Clist2&
CALL RethinkDisplay
RETURN
SUB SPRITE(s%) STATIC
IF s%=1 THEN POKEW 14676118&,32800&
IF s%=0 THEN POKEW 14676118&,32
END SUB
SUB box (x1,y1,xd,yd,status) STATIC
IF status>1 THEN
LINE (x1,y1)-(x1+xd,y1),2
LINE (x1,y1)-(x1,y1+yd),2
LINE (x1+xd,y1)-(x1+xd,y1+yd),1
LINE (x1,y1+yd)-(x1+xd,y1+yd),1
IF status=3 THEN LINE(x1+1,y1+1)-(x1+xd-1,y1+yd-1),0,bf
ELSEIF status<2 THEN
LINE (x1,y1)-(x1+xd,y1),1
LINE (x1,y1)-(x1,y1+yd),1
LINE (x1+xd,y1)-(x1+xd,y1+yd),2
LINE (x1,y1+yd)-(x1+xd,y1+yd),2
IF status=1 THEN LINE(x1+1,y1+1)-(x1+xd-1,y1+yd-1),0,bf
END IF
END SUB